4.7 IPv6

Para responder a la necesidad de un espacio de direcciones IP más grande, se desarrolló un nuevo protocolo IP, el protocolo IPv6. Una motivación adicional fue hacer un formato del cabezal que ayude a acelerar el procesamiento/forwarding del paquete.

Formato del datagrama IPv6: cabezal de largo fijo de 40 bytes y no se permite fragmentación.

  • Capacidades ampliadas de direccionamiento: IPv6 aumenta el tamaño de la dirección IP de 32 a 128 bits.
  • Una cabecera de 40 bytes simplificada: Permite un procesamiento más rápido del datagrama.
  • Prioridad y etiquetado del flujo: Permite etiquetar los paquetes que pertenecen a determinados flujos para que los que el emisor solicita un tratamiento especial, como un servicio en tiempo real o una calidad servicio no predeterminados.

Notación de las direcciones IPv6

La notación utilizada por IPv6 codifica las agrupaciones de 16 bits en su representación hexadecimal y separa parejas de éstos con el carácter “:” eliminando ceros a la izquierda dentro de dichas parejas, así como bloques completos de ceros representados por “::”. En total quedan 8 agrupaciones de 16 bits.

Encabezado IPv6

Pasted image 20221118001419.png

En la lista siguiente se describe la función de cada campo de encabezado.

  • Versión: número de versión de 4 bits del protocolo de Internet = 6.
  • Clase de tráfico: campo de clase de tráfico de 8 bits.
  • Etiqueta de flujo: campo de 20 bits.
  • Tamaño de carga útil: entero sin signo de 16 bits, que representa el resto del paquete que sigue al encabezado de IPv6, en octetos.
  • Encabezado siguiente: selector de 8 bits. Identifica el tipo de encabezado que va inmediatamente después del encabezado de IPv6. Emplea los mismos valores que el campo de protocolo IPv4.
  • Límite de salto: entero sin signo de 8 bits. Disminuye en uno cada nodo que reenvía el paquete. El paquete se desecha si el límite de salto se reduce a cero
  • Dirección de origen: 128 bits. Dirección del remitente inicial del paquete.
  • Dirección de destino: 128 bits. Dirección del destinatario previsto del paquete. El destinatario previsto no es necesariamente el destinatario si existe un encabezado de enrutamiento opcional.

Varios campos que aparecían en IPv4 ya no aparecen en IPv6, como, por ejemplo:

  • Fragmentación/Reensamblado: IPv6 solamente implementa fragmentación end-to-end, no en los routers intermedios; los datagramas cuya MTU exceda las posibilidades de un medio a lo largo del camino, serán descartados. Los datos necesarios para re-ensamblar el paquete ahora se incluyen en Next Header con valor 44.
  • Suma de comprobación de cabecera: Esta información la consideraron redundante, ya que este control se realiza en los protocolos TCP y UDP.
  • Opciones: permitido, pero fuera del header, indicado por el campo “Next Header”

Cabezales de extensión

  • Las “opciones” son manejadas a través de extension headers
  • Los headers son “enganchados” utilizando el campo Next Header
  • Los valores son inter-operables con los valores utilizados por el protocolo IPv4 (i.e. TCP = 6, UDP = 17 , etc.)
  • Extension headers:
    • Hop-by-hop header (NH=0)
    • Routing header (NH=43)
    • Fragment header (NH=44)
    • Authentication header (NH=51)
    • Encapsulated security payload (NH=50
    • Destination option (NH=60)

Tipos de direcciones IPv6

  • 128 bits.
  • Tres tipos diferentes (además de rangos reservados):
    • Unicast: Identifican exactamente una interfaz.
    • Multicast: Identifican a un grupo de interfaces. Un paquete enviado a una dirección de multicast es entregado a todos los miembros del grupo.
    • Anycast: Un paquete enviado a una dirección anycast es entregado al miembro “más próximo” del grupo.

Direcciones IPv6 especiales (RFC 5156)

  • Unspecified address: puede ser utilizada únicamente por un nodo que aún no tiene una dirección, y su valor es “0:0:0:0:0:0:0:0”, pudiendo ser abreviada -aún más- como “::” o “::/128”
  • Loopback address: utilizada -como en IPv4- para enviar datagramas IPv6 al propio host. El valor de la dirección es el “0:0:0:0:0:0:0:1” se abrevia como “::1” o “::1/128”
  • Default route: requerida para especificar el ruteo por defecto en las tablas de ruteo. Se representa por “0:0:0:0:0:0:0:0/0” y se abrevia como “::/0”

Transición de IPv4 a IPv6

No se puede hacer una actualización de todos los routers simultáneamente, o sea hacer un “dia D”.

La forma más directa es la pila dual (dual stack), donde todos los nodos de la red tengan una implementación para IPV4 e IPV6.

Otra opción es la tunelización, consiste en tomar el datagrama IPv6 completo como el campo de datos de un datagrama IPv4, el cual se envía normalmente por una red IPv4, permitiendo recuperar el datagrama IPv6 original en el receptor. El concepto se puede aplicar a múltiples protocolos “tunelizados” por otros.

Una última opción sería que se haga traducción entre IPv6 y IPv4 cuando sea necesario.

Dual Stack

IPv6 puede ser agregado a cualquier dispositivo que hable IPv4.
Los protocolos son multiplexados y de-multiplexados sobre los mismos enlaces (i.e. IEEE 802 family) utilizando diferentes números de protocolo en una misma posición del frame.
Misma técnica a la utilizada para mezclar IPX, Appletalk, TCP, etc.
Es un problema de la aplicación elegir cuál protocolo utilizar (i.e. si una respuesta a una consulta DNS contiene registros AAAA, entonces preferir TCP sobre IPv6 como transporte).
Esto habilita una transición paulatina, permitiendo a los desarrolladores actualizar gradualmente sus aplicaciones.
Lenguajes como Java permiten la utilización de objetos de tipo InetAddress, generalizaciones de Inet4Address e Inet6Address, haciendo su manejo independiente del protocolo.

Tunelización

Utilizamos el tunneling para “ocultar” tráfico IPv6 dentro de tráfico IPv4. De esta forma podemos cruzar secciones de Internet que nos son IPv6 Ready aún.
Los paquetes IPv6 se encapsulan en paquetes IPv4, que pueden tratarse como tráfico IPv4 standard.
Conceptualmente, puede pensarse como:

  • IPv6 utilizando IPv4 como una capa de enlace virtual
  • Una VPN IPv6 configurada sobre la Internet IPv4

Pasted image 20221118100642.png

Hay distintas formas de poner IPv6 en IPv4:

Pasted image 20221118100657.png

El concepto se puede aplicar a múltiples protocolos “tunelizados” por otros. El mecanismo más simple es el descripto, normalmente denominado 6in4; el mecanismo 6to4 es similar pero permite usar servidores de pasarela o relays. Entre otras posibilidades, se puede implementar la tunelización con transporte UDP, denominado Teredo; en este caso se facilita la tunelización a través de un router NAT.

ICMPv6, ND y etc

El protocolo que utiliza IPv6 para control en general es ICMPv6. El subprotocolo que se encarga del conocimiento, administración y gestión de vecinos en el enlace es el Neighboor Discovery Protocol, ND.

Los mensajes que se utilizan para descubrir y anunciar las direcciones MAC de un vecino asociadas a cierta dirección IPv6 son Neighbor Solicitation y Neighbor Advertisement. Cuando un host desea conocer la direccion MAC asociada a un vecino HOST-A envía un mensaje ND, con destino IPv6 la dirección de multicast asociada a todos los hosts (ff02::1) y con dirección de destino a nivel mac, la asociada a dicho grupo de multicast (que no es broadcast). En el payload de ICMPv6, el mensaje ND contiene la dirección objetivo de la consulta. La eventual respuesta (si existe y es alcanzable en ese momento el destino) será enviado en un mensaje de tipo unicast con las direcciones origen y destino esperadas a nivel de cabezales MAC e IPv6. En el payload ICMPv6 viene la respuesta a la consulta donde se indica la dirección MAC solicitada.

Diferencias con ARP

Reemplaza los mensajes “ARP request” de IPv4 (transportados en tramas de broadcast ethernet), brindando características mejoradas y teniendo mejor integración con la suite IPv6. ND forma parte de los mecanismos de base de IPv6, mientras que en IPv4 se utilizan diferentes mecanismos para alcanzar funcionalidades similares: ARP, ICMP router discovery, e ICMP redirect.

Path MTU Discovery

Los routers no realizan fragmentación en IPv6, por lo que, si un PDU de IPv6 excede el MTU es descartado. Es importante para cualquier par de entidades que se comuniquen, asegurarse que sus mensajes lleguen a destino, y para ello, sus mensajes no deben exceder el mínimo MTU del camino por el que transitan.

Esto no es necesario en IPv4. La definición de IPv4 involucra que, cuando segmentos de determinado flujo arriban a un enlace con un MTU inferior, se realiza fragmentación y reensamblado en dicho enlace, sin que las entidades origen y destino de la comunicación eventualmente lleguen a enterarse. Los extremos de la comunicación pueden ignorar el mínimo MTU del camino, pues, los routers intermedios lo resuelven.

Pseudocódigo del algoritmo por bipartición. Asumo que dispongo de una función para el envío de un mensaje ICMP echo request.

int pathMTUDiscovery(IPv6_address IP_O, IP_D)
	int max_mtu = link.getMTU();  // el valor máximo lo define el enlace 
	int min_mtu= 1280;  //según RFC 2460 
	int cant_fallos=0; 
	while ((max_mtu – min_mtu)>1) 
		mtu_candidato = (max_mtu + min_mtu) / 2; 
		envio_ICMP_ER(IP_O,IP_D,mtu_candidato); 
		switch event: 
			timeout: //no se lo que pasó: hubo retardo o se perdió el mensaje 
				if (cant_fallos < MAX_FALLOS_ADMITIDOS) 
					cant_fallos++; 
				else 
					return 1280;  // no pude determinar el MTU, pero 
								 // devuelvo un MTU válido 
			ICMP_echo_reply: // mtu_candidato es un MTU válido 
				min_mtu = mtu_candidato; 
			ICMP_packet_too_big: //mtu_candidato excede el pathMTU 
				max_mtu = mtu_candidato; 
	end; //while
	return min_mtu;